ROS2学习笔记(3)什么是ROS2 topics |
您所在的位置:网站首页 › ros2 topic list只有2个topic › ROS2学习笔记(3)什么是ROS2 topics |
什么是ROS2 topics
上一篇笔记学习了节点,ROS2正是帮我们可以把一个复杂的系统分解成很多个模块化的节点。 topics(话题)是ROS的重要元素,它的作用就充当这些模块化的节点之间交换信息的总线。 节点通过发布和订阅的方式进行话题消息通信。话题不是只有点对点的通信方式。一个节点可以发布向任意数量的话题发布数据,同时也可以订阅任意数量的话题。从而实现一对多、多对一、多对多的通信方式。 先来再次跑起海龟模拟器(turtlesim)和海龟操控键盘(turtle_teleop_key)。 查看话题列表新开一个终端输入ros2 topic list可以查看系统中当前存在的话题列表。 终端返回: /parameter_events /rosout /turtle1/cmd_vel /turtle1/color_sensor /turtle1/pose目前存在5个话题,从前一篇学习笔记中知道/turtlesim和/teleop_turtle节点都有*/turtle1/cmd_vel*这个话题。从名称cmd_vel可以猜测:是command velocity (速度命令)的缩写,/teleop_turtle节点通过这个话题发布速度,订阅者/turtlesim节点收到后移动海龟。 话题回显可以用ros2 topic echo 这个命令来回显话题中的数据。 来看一下/turtle1/cmd_vel这个话题的数据: ros2 topic echo /turtle1/cmd_vel运行后没有看到任何东西,这时候在运行turtle_teleop_key的终端操作方向键,就立看到回显的话题数据了 所以正是通过/turtle1/cmd_vel这个话题来使海龟移动。 查看话题信息前面的操作已经知道了话题列表里话题的名称,现在可以用ros2 topic info 命令来看话题的更多信息。 查看一下/turtle1/cmd_vel这个话题 ros2 topic info /turtle1/cmd_vel终端返回: 可以看到这个话题的类型是geometry_msgs/msg/Twist,发布者的数量1个,订阅者的数量1个。可以尝试多开几个海龟窗口,看看话题信息的变化。 ros2 interface show我们已经了解到,节点使用消息通过话题发送数据。 发布者和订阅者必须传输相同类型的消息才能进行通信。 通过topic info命令,我们知道了/turtle1/cmd_vel的类型是geometry_msgs/msg/Twist。(使用ros2 topic list -t这个命令可以同时查看话题列表和每个话题的类型)。 geometry_msgs/msg/Twist表示在geometry_msgs包中有一个msg叫做Twist。 通过**ros2 interface show **这个命令可以查看消息类型的更多细节,特别是消息的数据结构。 查看一下geometry_msgs/msg/Twist: 可以了解到这个消息类型中包含两个三维向量,分别是线速度和角速度。 其它补充使用命令将数据发布到话题。可以使用ros2 topic pub ''这个命令直接在命令行测试消息发布到话题。 需要注意的是 ''参数需要以 YAML 语法输入,比如用以下命令发布一次消息: ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"使用命令查看话题中数据发布的频率。可以使用ros2 topic hz 。 ROS2话题的学习就先到这了。 参考: ROS 2 Documentation:https://docs.ros.org/en/galactic/index.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |